package com.gzsxy.sso.core.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gzsxy.sso.common.dto.response.MenuRsp;
import com.gzsxy.sso.core.entity.Menu;
import com.gzsxy.sso.core.entity.vo.MenuQueryVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MenuMapper extends BaseMapper<Menu> {

    /**
     * @description: 根据应用代码或应用Id查询该应用的所有菜单
     * @param  request 应用代码或者应用Id
     * @return  菜单列表
     */
    List<MenuRsp> findByApp(MenuQueryVo request);

    /**
     * @description: 根据应用代码查询用户拥有的菜单权限
     * @param  request 应用代码或者用户Id或者应用id
     * @return  菜单列表
     */
    List<MenuRsp> findMenuByUserId(MenuQueryVo request);

    /**
     * @description: 获取全部菜单功能
     * @param
     * @return
     */
    List<MenuRsp> getMenu(MenuQueryVo menuQueryVo);


    /**
     * @description: 根据角色id查询所有功能列表
     * @param roleId 角色id
     * @return
     */
    List<MenuRsp> getfunctionByRoles(String roleId);

    /**
     * @description: 根据功能id查询是否存在关联的菜单
     * @param funcId 功能id
     * @return
     */
    Boolean existByFuncId(String funcId);


    /**
     * @description: 根据功能id解除所有的关联
     * @param  funcId 功能id
     * @return
     */
    void clearFuncId(String funcId);

    /**
     * @description: 是否存在相同菜单名
     * @param
     * @return
     */
    Boolean existByMenuName(@Param("appId") String appId,@Param("name") String name);


    /**
     * @description: 查询菜单是否拥有子菜单
     * @param id 菜单id
     * @return
     */
    Boolean existChildren(String id);

    /**
     * @description: 查询所有的子菜单
     * @param  id
     * @return
     */
    List<MenuRsp> findChildren(String id);

    /**
     * @description: 该应用是否存在关联的菜单
     * @param
     * @return
     */
    Boolean existByAppId(String appId);
}
